<?php
declare (strict_types = 1);

namespace app\api\controller;

use app\api\services\TypeServices;
use app\BaseController;
use think\Request;
use think\facade\Db;
use app\api\model\Goods;
use app\api\model\Type as Typemodel;
use app\api\model\Attribute;
use app\api\model\SpecValue;
use app\api\model\Spec;
use think\exception\ValidateException;
class Type extends BaseController
{

    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        Db::startTrans();
        $data=\app\api\model\Type::getType();
        dd($data->toArray());
    }

    /**
     * 显示创建资源表单页.
     *
     * @return \think\Response
     */
    public function create()
    {
        //
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        $data=$request->getContent();
        dd($data);
        // 假设接收的表单数据
        /*$data = [
            'type_name' => '手机',
            'attr' => [
                [
                    'name' => '毛重',
                    'sort' => 100,
                    'value' => ['500g', '', '2000g', '5000g', '']
                ],
                [
                    'name' => '产地',
                    'sort' => 100,
                    'value' => ['国产', '港货', '美版']
                ]
            ],
            'spec' => [
                [
                    'name' => "颜色",
                    'sort' => 100,
                    'value' => ['黑色', '土豪金', '蓝色', '红色', '白色', '', '']
                ], [
                    'name' => "=内存",
                    'sort' => 100,
                    'value' => ['64G', '256G', '1T', '128G']
                ],
                [
                    'name' => "产地",
                    'sort' => '100',
                    'value' => ['国产','美国','港版']
                ]
            ],
        ];*/
        // 校验数据
        try {
            $this->validate($data, [
                'type_name|商品模型' => "require",
                'attr|商品属性' => "array",
                'spec|商品规格' => 'array'
            ]);
        } catch (ValidateException $exception) {
            return error($exception->getError());
        }

        // 启动事务
        Db::startTrans();
        try {
            // 调用逻辑层将模型信息入库并得到模型的主键id
            $type = TypeServices::addType($data);
            //规格入库
            $data=arrayFilter($data,'spec');

            TypeServices::addSpec($data);
            //规格入库
            TypeServices::addSpecValue($data);
            //属性
            $data=arrayFilter($data,'attr');
            TypeServices::addAttr($data);
            // 提交事务
            Db::commit();
            // 返回数据
            return success($type);
        } catch (\Exception $e) {
            // 回滚事务
            Db::rollback();
            // 给出错误提示
            return error($e->getMessage());
        }
    }

    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read($id)
    {
        //
    }

    /**
     * 显示编辑资源表单页.
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

        /**
         * 删除指定资源
         *
         * @param int $id
         * @return \think\Response
         */
        public function delete(Request $request)
    {
        // 参数校验
        $id=$request->get('id');

        if (!is_numeric($id)) {
            return error("参数格式不正确");
        }
        // 如果该模型下有商品则不可删除
        $goodsData = Goods::getTypeByGoods($id);

        if($goodsData){
            return error("当前模型下有商品，暂不可删除");
        }
        // 启动事务
        //Db::startTrans();
        try {
            // 删除该模型对应的属性
            //Attribute::getTypeIdByDeleteAttr($id);


            Attribute::where('type_id', $id)->delete();

            echo Attribute::getLastSql();


            // 删除该模型对应的规格名
            Spec::getTypeIdByDeleteSpec($id);
            // 删除该模型对应的规格值
            SpecValue::getTypeIdByDeleteSpecValue($id);
            // 删除当前模型
            Typemodel::deleteType($id);

            //dd(2);
            // 提交事务
//            Db::commit();
            // 返回值
            return success("删除成功");
        } catch (\Exception $e) {
            // 回滚事务
            //Db::rollback();
            return error("数据库操作异常,请稍后再试");
        }
    }
}
